/// 判断是否为正确格式的手机号码
///
/// 判断标准：
/// - 第一位为 1
/// - 第二位为 3-9
/// - 之后是 9 位数字 （总计 11 位）
bool isValidTel(String s) {
  return RegExp(r'^1[3-9]\d{9}$').hasMatch(s);
}

/// 判断是否为正确格式的密码
///
/// 判断标准：
/// - 可用符号为数字和大小写字母
/// - 长度为 8-20 位
bool isValidPassword(String s) {
  return RegExp(r'^[\dA-Za-z]{8,20}$').hasMatch(s);
}

/// 判断是否数字，s 为 null 时返回 false
bool isValidNumber(String? s) {
  return s != null && num.tryParse(s) != null;
}

/// 判断是否为正确的身份证号码
///
/// 同时校验二代身份证和一代身份证，不校验校验码
bool isValidIDCard(String? s) {
  const prcId18 =
      r'^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$';
  const prcId15 =
      r'^[1-9]\d{7}(?:0\d|10|11|12)(?:0[1-9]|[1-2][\d]|30|31)\d{3}$';

  return s != null &&
      (RegExp(prcId18).hasMatch(s) || RegExp(prcId15).hasMatch(s));
}

/// 邮箱判断
bool isEmail(String input) {
  String regexEmail =
      "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}\$";
  if (input.isEmpty) return false;
  return RegExp(regexEmail).hasMatch(input);
}
